package vista;

import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;






import controlador.CdUsuarios;


import entidades.Usuarios;
import entidades.iOperaciones;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;



public class ClCtrUsuarios implements Initializable, iOperaciones {
		  
	@FXML
	TextField txtIdUsuario;
	@FXML
	TextField txtNombre;
	@FXML
	TextField txtApellidos;
	@FXML
	TextArea txtDireccion;
	@FXML
	TextField txtNip;
	@FXML
	TextField txtTelefono;
	@FXML
	TextField txtContrasenia;
	@FXML
	Button btnGuardar;
	@FXML
	Button btnEliminar;
	
	@FXML
	TableView <Object>tvUsuarios;
	@FXML
	TableColumn tcIdUsuario;
	@FXML
	TableColumn tcNombre;
	@FXML
	TableColumn tcApellidos;
	@FXML
	TableColumn tcDireccion;
	@FXML
	TableColumn tcNip;
	@FXML
	TableColumn tcTelefono;
	@FXML
	TableColumn tcContrasenia;
	
	private boolean esnuevo=true;
	private Usuarios usuario;
	private CdUsuarios datosUsuario=new CdUsuarios();
    private List<Object> listaTipoCuentas =new ArrayList<Object>();
	
	private vista.MainApp mainApp;

	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		
		tvUsuarios.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>(){

			@Override
			public void changed(ObservableValue<? extends Object> observable,
					Object oldValue, Object newValue) {
				// TODO Auto-generated method stub
				datosUsuario(newValue);
				
			}
			
		});
		// TODO Auto-generated method stub
		llenarTvUsuarios();
		btnGuardar.setOnAction(new btnGuardar_Click());
		btnEliminar.setOnAction(new btnEliminar_Click());
		
	}
	
	private void limpiar(){
		txtIdUsuario.setText("");
		txtNombre.setText("");
		txtApellidos.setText("");
		txtDireccion.setText("");
		txtNip.setText("");
		txtTelefono.setText("");
		txtContrasenia.setText("");
		esnuevo=true;
	}
	private void datosUsuario(Object seleccionado){
		usuario=(Usuarios) seleccionado;
		if(usuario != null){
		esnuevo = false;
		txtIdUsuario.setText(Integer.toString(usuario.getIdUsuario()));
		txtNombre.setText(usuario.getNombre());
		txtApellidos.setText(usuario.getApellidos());
		txtDireccion.setText(usuario.getDireccion());
		txtNip.setText(usuario.getNip());
		txtTelefono.setText(usuario.getTelefono());
		txtContrasenia.setText(usuario.getContrasenia());
		
		}
	}
	
	
	//para llenar la tabla de clientes
	public void llenarTvUsuarios(){
		List<Object> lista= new ArrayList<Object>();
		try {
			lista = listar();
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ObservableList<Object>listaObs=FXCollections.observableArrayList(lista);
		tcIdUsuario.setCellValueFactory(new PropertyValueFactory<Usuarios, Integer>("idUsuario"));
		tcNombre.setCellValueFactory(new PropertyValueFactory<Usuarios,String>("nombre"));
		tcApellidos.setCellValueFactory(new PropertyValueFactory<Usuarios,String>("apellidos"));
		tcDireccion.setCellValueFactory(new PropertyValueFactory<Usuarios,String>("direccion"));
		tcNip.setCellValueFactory(new PropertyValueFactory<Usuarios,String>("nip"));
		tcTelefono.setCellValueFactory(new PropertyValueFactory<Usuarios,String>("telefono"));
		tcContrasenia.setCellValueFactory(new PropertyValueFactory<Usuarios,String>("contrasenia"));
		tvUsuarios.setItems(listaObs);//asigna los elemento de una lista a una nueva lista listaobs
		
	}
	private class btnGuardar_Click implements EventHandler<ActionEvent>
	{
			@Override
		public void handle(ActionEvent arg0) {
				if(esnuevo==true){
					usuario=new Usuarios(txtNombre.getText(),txtApellidos.getText(),txtDireccion.getText(),txtNip.getText(),txtTelefono.getText(),txtContrasenia.getText());
					try{
						
						if(agregar(usuario)){
							System.out.println("registro existoso");
							llenarTvUsuarios();
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					
				}
				else{
					if(esnuevo==false){
					usuario.setNombre(txtNombre.getText());
					usuario.setApellidos(txtApellidos.getText());
					usuario.setDireccion(txtDireccion.getText());
					usuario.setNip(txtNip.getText());
					usuario.setTelefono(txtTelefono.getText());
					usuario.setContrasenia(txtContrasenia.getText());
					
					try{
						
						if(actualizar(usuario)){
							System.out.println("registro existoso");
							llenarTvUsuarios();
						}
						else{
							System.out.println("registro fallido");
						}	
						
					}
					catch(Exception e){
						System.out.print(e);
						esnuevo=false;
					}
					}
				}
				limpiar();	
			}
				
			
			
			}
			
	private class btnEliminar_Click implements EventHandler<ActionEvent>{

		@Override
		public void handle(ActionEvent arg0) {
			// TODO Auto-generated method stub
			
			usuario.setIdUsuario(Integer.parseInt(txtIdUsuario.getText()));	
			usuario.setNombre(txtNombre.getText());
			usuario.setApellidos(txtApellidos.getText());
			usuario.setDireccion(txtDireccion.getText());
			usuario.setNip(txtNip.getText());
			usuario.setTelefono(txtTelefono.getText());
			usuario.setContrasenia(txtContrasenia.getText());
			
			
			try{
				
				if(eliminar(usuario)){
					System.out.println("cliente eliminado exitosamente");
					llenarTvUsuarios();
					limpiar();
				}
				else{
					System.out.println("operacin  fallida");
				}	
				
			}
			catch(Exception e){
				System.out.print(e);
				esnuevo=false;
			}	
		}
			
		}
	
	
	

	public void setMainApp(vista.MainApp mainApp){
		this.mainApp = mainApp;
	}

	@Override
	public boolean agregar(Object nuevo) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosUsuario.agregar(nuevo);
	}

	@Override
	public boolean actualizar(Object modificado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosUsuario.actualizar(modificado);
	}

	@Override
	public boolean eliminar(Object eliminado) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosUsuario.eliminar(eliminado);
	}

	@Override
	public List<Object> listar() throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SQLException {
		// TODO Auto-generated method stub
		return datosUsuario.listar();
	}
	

}



